package com.example.service.pet;

import com.example.dto.request.pet.PersonalPetRequestDTO;
import com.example.dto.business.PetBriefInfoBusinessDTO;
import com.example.exception.DeleteFileFailedException;
import com.example.exception.FileUrlParseException;
import com.example.dto.business.PetBusinessDTO;
import com.example.service.AvatarService;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;


/**
 * @author Lexin Huang
 */
public interface PersonalPetService extends AvatarService {

    /**
     * 为用户新增宠物
     * @param userId 用户id
     * @param petDTO 宠物信息
     * @return 宠物id
     * @throws com.example.exception.InsertException 当插入宠物记录失败时
     */
    Integer addPet(Integer userId, PersonalPetRequestDTO petDTO) ;

    void modifyPetProfile(Integer userId, Integer petId, PersonalPetRequestDTO petDTO);

    /**
     *
     * @param petId 宠物id
     * @param userId 用户id
     * @param image 图片文件
     * @return 头像url
     * @throws FileUrlParseException 当配置错误而导致文件 url 不能解析出文件路径时
     * @throws DeleteFileFailedException 当删除原上传头像失败时
     */
    String replaceAvatar(Integer petId, Integer userId, MultipartFile image) ;

    /**
     * 获取用户所有宠物的概览信息
     * @param userId 用户id
     * @return 宠物信息集合
     */
    List<PetBriefInfoBusinessDTO> getPetsBriefInfo(Integer userId);

    PetBusinessDTO getPetDetailedInfo(Integer userId, Integer petId);

    void removeById(Integer userId, Integer petId);

    void addPetPhotos(Integer userId, Integer petId, MultipartFile[] photos) throws IOException;

    String getPetCollarIp(Integer userId, Integer petId);
}
